/**
 * 
 */
package com.bbva.gptf.back.calculos;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import junit.framework.Assert;

//import com.bbva.gptf.back.dominio.SpCalcSimulacion;
import com.bbva.gptf.back.transformador.InstrumentoTypeToArrayTransformador;
import com.bbva.gptf.back.transformador.InstrumentoTypeToInstrumentosSimulacionTransformador;
import com.bbva.gptf.back.transformador.TransformadorInstrumentoType;
import com.bbva.gptf.dto.bean.InstrumentoType;
import com.bbva.gptf.dto.bean.InstrumentosSimulacion;
import com.bbva.gptf.dto.bean.TipoClasificacion;
import com.bbva.gptf.dto.calculos.CalculoTotalObjetivo;
import com.bbva.gptf.dto.calculos.ISpCalcular;

/**
 * @author etamayad
 *
 */
public class CalculoTotalObjetivoImpl implements CalculoTotalObjetivo {

	/**
	 * Contiene las instancias, para realizar el redondeo para compra o venta para
	 * impacto titulos.
	 */
	@Autowired
	private Map<String,ISpCalcular> calculos;
	
	/* (non-Javadoc)
	 * @see com.bbva.gptf.dto.calculos.CalcularTotalObjetivo#calcular(java.util.List)
	 */
	
	public void setCalculos(Map<String, ISpCalcular> calculos) {
		this.calculos = calculos;
	}
		
	@Override
	public List<InstrumentosSimulacion> calcular(TipoClasificacion clasificacion, List<InstrumentosSimulacion> listaInstrumentos) {	
		List<InstrumentosSimulacion> listaCalculada = null;
		TransformadorInstrumentoType transformadorInstrumentoType = new TransformadorInstrumentoType();	
		List<InstrumentoType> lista = transformadorInstrumentoType.convert(listaInstrumentos);		
		try {
			InstrumentoTypeToArrayTransformador transformador = new InstrumentoTypeToArrayTransformador();
			Object[][] objetos = transformador.convert(lista);
			ISpCalcular spCalcSimulacion = calculos.get(clasificacion.toString());
			lista = spCalcSimulacion.execute(objetos);
			InstrumentoTypeToInstrumentosSimulacionTransformador transformadorsimulacion = new InstrumentoTypeToInstrumentosSimulacionTransformador();
			listaCalculada = transformadorsimulacion.convert(lista);			
		}catch (Exception e) {
			e.printStackTrace();			
		}
		return listaCalculada;
	}

}
